home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / SCREEN.SWG / 0046_SMOOTH Scroll.pas < prev    next >
Pascal/Delphi Source File  |  1993-11-21  |  4KB  |  127 lines

  1. {
  2. From: CYRUS PATEL
  3. Subj: Stuff...
  4. >Does anyone have either ASM or TP (7.0) code to do vga scrolling, ie as
  5. in BBS demos, loaders...
  6.  
  7. ------------------------ SWAG snippet ---------------------------
  8. {
  9.  Here is some demo code showing how to use Smooth.Obj.  It offers
  10.  vertical and horizontal smooth scrolling in Text or Graphics modes.
  11.  
  12.  NOTE:      Requires Smooth.Obj (see below)   EGA & VGA ONLY !!!!
  13.  
  14.  REQUIRES:  Smooth.Obj  Run the debug script through DEBUG to create
  15.             Smooth.Obj.  The NEXT message has the debug script.
  16.  
  17.  ALSO:      Until last week, I'd never seen a line of Pascal code.
  18.             So ForGIVE the rough edges of this code:  bear in mind
  19.             the Complete novice status of its author <!!G!!>           }
  20.  
  21. Uses Crt;
  22.  
  23. { NOTE:  SmoothScroll is a MEDIUM MODEL Asm/OBJ For use in
  24.          **either** Pascal or most flavors of modern BASIC.
  25.  
  26.          It expects parameters to be passed by reference!  We handle
  27.          that here by not including Var, then passing Ofs(parameter).
  28.  
  29.          Don't know if this is appropriate, but it works. Comments?   }
  30.  
  31. {$F+} Procedure SmoothScroll(Row, Column: Integer); external; {$F-}
  32. {$L Smooth.Obj}
  33.  
  34. Var
  35.    Row, Col, Speed, WhichWay : Integer;
  36.    Ch : Char;
  37.    s  : String [60];
  38.  
  39. begin
  40.    TextColor (14); TextBackground (0); ClrScr;
  41.  
  42.    GotoXY (25,4);  Write ('Press <Escape> to move on.');
  43.  
  44.    ch := 'A';
  45.    For Row := 10 to 24 do
  46.        begin
  47.          FillChar (s, Sizeof(s), ch);
  48.          s[0] := #60;  Inc (ch);
  49.          GotoXY (10, Row); Write (s);
  50.        end;
  51.  
  52.    Speed := 1;                         { Change Speed!  See notes. }
  53.  
  54.    {The higher the Speed, the faster the scroll.
  55.         Use Speed = 1 For subtle scrolling.
  56.         Try Speed = 5 (10 in Graphics) For very fast scrolling.
  57.         Try Speed = 10+ (25 in gfx) to see some **Real shaking**.
  58.  
  59.         Even in Text mode here, Row and Column use GraphICS MODE
  60.         pixel coordinates (ie., begin w/ 0,0).   }
  61.  
  62.    {================================= demo vertical smooth scrolling}
  63.    Row := 0; Col := 0;
  64.    WhichWay := Speed;                   { start by going up }
  65.  
  66.    Repeat                               { press any key to end demo }
  67.       GotoXY (2,10);  Write (Row, ' ');
  68.       SmoothScroll(ofs(Row), ofs(Col));
  69.       Row := Row + WhichWay;
  70.  
  71.       if (Row > 150) or (Row < 2) then  { try 400 here }
  72.          WhichWay := WhichWay * -1;     { reverse direction }
  73.  
  74.       if Row < 1 then Row := 1;
  75.  
  76.    Until KeyPressed;
  77.  
  78.    ch := ReadKey; Row := 0; Col := 0;
  79.    SmoothScroll ( ofs(Row), ofs(Col) ); { return to normal (sort of) }
  80.  
  81.    {================================= demo horizontal smooth scrolling}
  82.    Row := 0; Col := 0;
  83.    WhichWay := Speed;                   { start by going left }
  84.  
  85.    Repeat                               { press any key to end demo }
  86.       GotoXY (38,3); Write (Col, ' ');
  87.       SmoothScroll(ofs(Row), ofs(Col));
  88.       Col := Col + WhichWay;
  89.  
  90.       if (Col > 65) or (Col < 0) then   { try 300 here }
  91.          WhichWay := WhichWay * -1;     { reverse direction }
  92.       if Col < 0 then Col := 0;
  93.    Until KeyPressed;
  94.  
  95.    Row := 0; Col := 0; SmoothScroll(ofs(Row), ofs(Col));
  96. end.
  97.  
  98. { Capture the following to a File (eg. S.Scr).
  99.  then:    DEBUG < S.SCR.
  100.  
  101.  Debug will create SMOOTH.OBJ.
  102.  
  103.  N SMOOTH.OBJ
  104.  E 0100 80 0E 00 0C 73 6D 74 68 73 63 72 6C 2E 61 73 6D
  105.  E 0110 87 96 27 00 00 06 44 47 52 4F 55 50 0D 53 4D 54
  106.  E 0120 48 53 43 52 4C 5F 54 45 58 54 04 44 41 54 41 04
  107.  E 0130 43 4F 44 45 05 5F 44 41 54 41 90 98 07 00 48 89
  108.  E 0140 00 03 05 01 87 98 07 00 48 00 00 06 04 01 0E 9A
  109.  E 0150 04 00 02 FF 02 5F 90 13 00 00 01 0C 53 4D 4F 4F
  110.  E 0160 54 48 53 43 52 4F 4C 4C 00 00 00 A7 88 04 00 00
  111.  E 0170 A2 01 D1 A0 8D 00 01 00 00 55 8B EC 06 56 33 C0
  112.  E 0180 8E C0 8B 76 08 8B 04 33 D2 26 8B 1E 85 04 F7 F3
  113.  E 0190 8B D8 8B CA 26 A1 4A 04 D0 E4 F7 E3 8B 76 06 8B
  114.  E 01A0 1C D1 EB D1 EB D1 EB 03 D8 26 8B 16 63 04 83 C2
  115.  E 01B0 06 EC EB 00 A8 08 74 F9 EC EB 00 A8 08 75 F9 26
  116.  E 01C0 8B 16 63 04 B0 0D EE 42 8A C3 EE 4A B0 0C EE 42
  117.  E 01D0 8A C7 EE 4A 83 C2 06 EC EB 00 A8 08 74 F9 83 EA
  118.  E 01E0 06 B0 08 EE 8A C1 42 EE 83 C2 05 EC BA C0 03 B0
  119.  E 01F0 33 EE 8B 76 06 8B 04 24 07 EE 5E 07 8B E5 5D CA
  120.  E 0200 04 00 F5 8A 02 00 00 74
  121.  RCX
  122.  0108
  123.  W
  124.  Q
  125.  
  126. '========  end of Debug Script ========
  127.